package com.cloud.nio;

import java.io.FileNotFoundException;
import java.io.RandomAccessFile;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;


// MappedByteBuffer 可以让文件直接再内存(堆外内存)修改，操作系统不需要拷贝一次
// 是一个操作系统级别的类
public class MapperByteBufferTest {

    public static void main(String[] args) throws Exception {
        RandomAccessFile randomAccessFile = new RandomAccessFile("1.txt","rw");

        // 获取对应通道
        FileChannel channel = randomAccessFile.getChannel();

        /**
         * 参数1： FileChannel.MAP.READ_WRITE
         * 参数2： 0 可以直接修改的起始位置
         * 参数3： 5 是映射到内存的大小，即将从 1.txt 的多少个字节映射到内存
         */
        // 抽象类
        MappedByteBuffer mappedByteBuffer = channel.map(FileChannel.MapMode.READ_WRITE, 0, 5);

        mappedByteBuffer.put(0,(byte)'H');
        mappedByteBuffer.put(1,(byte)'H');
        mappedByteBuffer.put(2,(byte)'H');

        randomAccessFile.close();
        System.out.println("修改成功！");

    }
}
